<?php

/**
 * Lấy 1 bản ghi theo tùy chọn $options
 * @param string tên bảng
 * @param array  tùy chọn
 * @return array bản ghi
 */ 
function get_one($table, $options=array()){
    global $db;
    
    if (isset($options['select'])) $select = $options['select']; else $select = '*';
    if (isset($options['join'])) $join = $options['join']; else $join = '';
    if (isset($options['where'])) $where = 'WHERE '.$options['where']; else $where = '';
    
    $sql = "SELECT $select FROM `$table` $join $where";
    $query = mysqli_query($db, $sql) or die(mysqli_error($db));
    
    $row = NULL;
    if (mysqli_num_rows($query)>0) {
        $row = mysqli_fetch_assoc($query);
    }
    
    return $row;
}

/**
 * Lấy nhiều bản ghi theo tùy chọn $options
 * @param string tên bảng
 * @param array tùy chọn
 * @return array danh sách bản ghi
 */
function get_all($table, $options=array()){
    global $db;
    
    if (isset($options['select'])) $select = $options['select']; else $select = '*';
    if (isset($options['join'])) $join = $options['join']; else $join = '';
    if (isset($options['where'])) $where = 'WHERE '.$options['where']; else $where = '';
    if (isset($options['limit']) && isset($options['offset'])) $limit = 'LIMIT '.$options['offset'].','.$options['limit']; else $limit = '';
    if (isset($options['order_by'])) $order_by = 'ORDER BY '.$options['order_by']; else $order_by = '';
    
    $sql = "SELECT $select FROM `$table` $join $where $order_by $limit";
    $query = mysqli_query($db, $sql) or die(mysqli_error($db));
    
    $result = array();
    if (mysqli_num_rows($query)>0) {
        while($row = mysqli_fetch_assoc($query)) {
            $result[] = $row;
        }
    }
    
    return $result;
}

/**
 * Tổng số bản ghi theo tùy chọn $options
 * @param string tên bảng
 * @param array tùy chọn
 * @return int  tổng số bản ghi
 */
function get_total($table, $options=array()){
    global $db;
    
    if (isset($options['select'])) $select = $options['select']; else $select = '*';
    if (isset($options['join'])) $join = $options['join']; else $join = '';
    if (isset($options['where'])) $where = 'WHERE '.$options['where']; else $where = '';
    
    $sql = "SELECT COUNT(*) as total FROM `$table` $join $where";
    $query = mysqli_query($db, $sql) or die(mysqli_error($db));
    
    $row = mysqli_fetch_assoc($query);
    
    return $row['total'];
}

/**
 * Lấy 1 bản ghi theo khóa chính
 * @param string tên bảng
 * @param int  khóa chính
 * @return array bản ghi
 */
function get_a_record($table, $id){
    global $db;
    
    $sql = "SELECT * FROM `$table` WHERE id=$id";
    $query = mysqli_query($db, $sql) or die(mysqli_error($db));
    
    $row = NULL;
    if (mysqli_num_rows($query)>0) {
        $row = mysqli_fetch_assoc($query);
    }
    
    return $row;
}
/**
 * Thêm 1 bản ghi vào CSDL
 * @param string : tên bảng
 * @param array  : dữ liệu
 * @return int   : khóa chính
 */
function insert($table, $data=array()) {
    global $db;
    
    foreach($data as $field => $value) {
        $value = mysqli_real_escape_string($db, $value);
        $fields[] = "`$field`";
        $values[] = "'$value'";
    }
    
    $sql = "INSERT INTO `$table` (".implode(',',$fields).") VALUES (".implode(',',$values).")";
    $query = mysqli_query($db, $sql) or die(mysqli_error($db));
    
    return mysqli_insert_id($db);
}

/**
 * Cập nhật 1 bản ghi vào CSDL
 * @param string : tên bảng
 * @param int    : khóa chính
 * @param array  : dữ liệu
 * @return int   : khóa chính
 */
function update($table, $id, $data=array()) {
    global $db;
    
    foreach($data as $field => $value) {
        $value = mysqli_real_escape_string($db, $value);
        $values[] = "`$field`='$value'";
    }
    
    $sql = "UPDATE `$table` SET ".implode(',',$values)." WHERE id=$id";
    $query = mysqli_query($db, $sql) or die(mysqli_error($db));
    
    return $id;
}

/**
 * Xóa các bản ghi
 * @param string : tên bảng
 * @param int    : danh sách khóa chính
 */
function delete($table, $id=array()) {
    global $db;
    
    if (!is_array($id)) {
        $id = array($id);
    }
    
    $sql = "DELETE FROM `$table` WHERE id IN (".implode($id).")";
    $query = mysqli_query($db, $sql) or die(mysqli_error($db));
}

/**
 * Thay đổi trạng thái bản ghi
 * @param string : tên bảng
 * @param int    : trạng thái
 * @param int    : danh sách khóa chính
 */
function status($table, $status, $id) {
    global $db;
    
    if (!is_array($id)) {
        $id = array($id);
    }
    
    $sql = "UPDATE `$table` SET status='$status' WHERE id IN (".implode(',', $id).")";
    $query = mysqli_query($db, $sql) or die(mysqli_error($db));
}